﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Text;

using ECCIT;
using OgilvyOne.UKNow.Model;
using OgilvyOne.UKNow.Utility;

namespace OgilvyOne.UKNow.IDAL
{
    public interface IDALMember
    {
        #region 获取数据接口

        /// <summary>
        ///     根据ID获取对象
        /// </summary>
        /// <param name="id">ID</param>
        /// <returns>如果存在，返回MemberModel，如果不存在，返回null</returns>
        MemberModel GetMemberModelByID(int? id);
        
        /// <summary>
        ///     获取所有数据，默认根据最后修改时间倒排序
        /// </summary>
        /// <returns></returns>
        IList<MemberModel> GetAllMemberModels();

        /// <summary>
        ///     会员登录接口
        /// </summary>
        /// <param name="memberName">会员账号名称</param>
        /// <param name="password">会员密码</param>
        /// <returns></returns>
        ResultInfo SignIn(string memberName, string password);

        /// <summary>
        /// 处理老的用户没有token的问题
        /// </summary>
        /// <param name="email"> </param>
        /// <param name="token"></param>
        /// <returns></returns>
        bool UpdateToekn(string  email, string token);

        #endregion

        #region 操作数据接口
        /// <summary>
        ///     保存数据
        /// </summary>
        /// <param name="modelInfo">数据对象</param>
        /// <returns>
        ///     通过判断ResultInfo.Result为true还是false获取保存是否成功
        ///     如果ResultInfo.Result为true，可以通过ResultInfo.ReturnedObject获取modelInfo
        ///     如果ResultInfo.Result为false，可以通过ResultInfo.Message获取错误提示，通过ResultInfo.Exception获取异常信息
        /// </returns>
        ResultInfo Save(MemberModel modelInfo);
        
        /// <summary>
        ///     根据数据ID列表删除数据
        /// </summary>
        /// <param name="idList">ID列表</param>
        /// <returns>
        ///     通过判断ResultInfo.Result为true还是false获取删除是否成功
        ///     如果ResultInfo.Result为false，可以通过ResultInfo.Message获取错误提示，通过ResultInfo.Exception获取异常信息
        /// </returns>
        ResultInfo Delete(IList<int?> idList);

        /// <summary>
        ///     根据用户名
        /// </summary>
        /// <param name="value">用户名</param>
        /// <returns>如果存在，返回NewsModel，如果不存在，返回null</returns>
        IList<MemberModel> Check(string value);
        /// <summary>
        ///     根据邮箱
        /// </summary>
        /// <param name="value">邮箱</param>
        /// <returns>如果存在，返回NewsModel，如果不存在，返回null</returns>
        IList<MemberModel> CheckEmail(string email);

        /// <summary>
        ///     根据时间条件获取数据
        /// </summary>
        /// <param name="value">开始时间</param>
        /// <param name="value">结束时间</param>
        /// <returns>返回对象</returns>
        IList<MemberModel> QueryTime(string staTime, string endTime);

        /// <summary>
        ///     设置提醒全部活动
        /// </summary>
        /// <param name="memberID">会员ID</param>
        /// <param name="enabled">
        ///     true - 允许提醒全部活动
        ///     false - 取消提醒全部活动
        /// </param>
        /// <returns></returns>
        ResultInfo SetReminderAllEvents(int? memberID, bool enabled);

        /// <summary>
        ///     根据guid
        /// </summary>
        /// <param name="gid">guid</param>
        /// <returns>如果存在，返回NewsModel，如果不存在，返回null</returns>
        IList<MemberModel> CheckGuid(string gid);

        DataTable GetMyProfile(int memberid, string begintime, string endtime);

        DataTable GetMyInterests(int memberid);

        /// <summary>
        /// 取 我的账号左边的信息
        /// </summary>
        /// <param name="memberid"></param>
        /// <returns></returns>
        DataTable GetMyAccount(int memberid);


        /// <summary>
        /// 注销会员
        /// </summary>
        /// <param name="cnContent"></param>
        /// <param name="enContent"></param>
        /// <param name="memberid"></param>
        /// <returns></returns>
        ResultInfo CancelMember(string cnContent, string enContent, int memberid);

        bool CheckUser(string username, string inputname);


        MemberExt GetUserEventCount(int memberid, int lanagerid);

        /// <summary>
        /// 更新会员头像
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        bool UpdateMemberImg(MemberModel model,bool flag);

        #endregion
    }
}
